package com.ushine.web.base.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ushine.web.base.model.system.UserDO;
import com.ushine.web.component.exception.ServiceException;
import com.ushine.web.component.page.PageRequestQuery;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.List;
import java.util.Set;

/**
 * @Author: yls
 * @Date: 2021/3/12 13:27
 * @Description: 用户管理 -- Service
 * @Version 1.0
 */
public interface IUserService extends IService<UserDO> {

    /**
     * 功能描述:
     * 〈根据用户名查询用户信息，只查询用户信息，不包括角色、用户组〉
     *
     * @param userName 用户名
     * @return : org.springframework.security.core.userdetails.UserDetails
     * @author : yls
     * @date : 2021/12/07 22:01
     */
    UserDO getUserBaseInfo(String userName);

    /**
     * 功能描述:
     * 〈更新用户密码〉
     *
     * @param userDetails 用户实体
     * @param newPassword 新密码
     * @return : com.ushine.base.model.system.UserDO
     * @author : yls
     * @date : 2021/12/07 22:02
     * @throws ServiceException 服务端自定义异常
     */
    UserDO updatePassword(UserDetails userDetails, String newPassword) throws ServiceException;

    /**
     * 功能描述
     * (添加用户)
     *
     * @param userDO 用户
     * @return : java.lang.Integer
     * @author : yls
     * @date : 2021/3/15 10:22
     * @throws ServiceException 服务端自定义异常
     */
    Boolean insertUser(UserDO userDO) throws ServiceException;

    /**
     * 功能描述
     * (根据Id修改用户)
     *
     * @param userDO 待修改的用户
     * @return : java.lang.Boolean
     * @author : yls
     * @date : 2021/3/15 10:27
     */
    Boolean updateUser(UserDO userDO);

    /**
     * 功能描述
     * (批量删除用户)
     *
     * @param userIds 待删除用户的id集合
     * @return : java.lang.Boolean
     * @author : yls
     * @date : 2021/3/15 10:28
     */
    Boolean deleteUsers(List<String> userIds);

    /**
     * 功能描述
     * (分页查询用户)
     *
     * @param pageRequestQuery 分页查询条件
     * @return : java.util.List<com.ushine.interfaces.model.system.UserDO>
     * @author : yls
     * @date : 2021/3/15 10:22
     */
    Page<UserDO> listUsersByPage(PageRequestQuery<UserDO> pageRequestQuery);


    /**
     * 功能描述
     * (根据用户名查询对应的权限)
     *
     * @param userName 用户名
     * @return : java.util.List<com.ushine.interfaces.model.system.PermissionDO>
     * @author : yls
     * @date : 2021/3/15 17:41
     */
    Set<String> listPermissionsByUserName(String userName);

    /**
     * 功能描述
     * <根据id获取id查询用户>
     *
     * @param id 用户id
     * @return : com.ushine.interfaces.model.system.UserDO
     * @author : yls
     * @date : 2021/5/11 18:11
     */
    UserDO getUser(Long id);


}
